package verification;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Map;

/**
 * java已封装的数据类型状态验证<br/>
 * 判断数据的当前状态和预期状态是否一致<br/>
 * 或者判断数据是否有效
 *
 * @author 张峰浦
 * @create 创建时间：2020-01-15 11:15
 */
@SuppressWarnings("ALL")
public class JavaEncapsulation {

    /**
     * 判断字符串有效性
     *
     * @param src 需判断的string类字符串
     * @return 判断结果
     */
    public static final boolean valid(String src) {
        return !(src == null || "".equals(src.trim()));
    }

    /**
     * 判断一组字符串是否有效<br/>
     * 数组中存在无效字符串则判断为string类数组无效
     *
     * @param src 需判断的string类数组字符串，
     * @return 判断结果
     */
    public static final boolean valid(String[] src) {
        for (String s : src) {
            if (!valid(s)) {
                return false;
            }
        }
        return true;
    }


    /**
     * * 判断一个对象是否为空<br/>
     *
     * @param obj 需判断的Object类
     * @return 验证结果
     */
    public static final boolean valid(Object obj) {
        return (null != obj);
    }

    /**
     * 判断一组对象是否有效
     *
     * @param objs 需判断的Object类数组
     * @return 判断结果
     */
    public static final boolean valid(Object[] objs) {
        return objs != null && objs.length != 0;
    }

    /**
     *
     */
    /**
     * 判断集合的有效性
     *
     * @param col
     * @return 判断结果
     */
    public static final boolean valid(Collection col) {
        return !(col == null || col.isEmpty());
    }

    /**
     * 判断一组集合是否有效<br/>
     * Collection为不定参数类型
     *
     * @param cols 需判断的Collection类
     * @return 判断结果
     */
    public static final boolean valid(Collection... cols) {
        for (Collection c : cols) {
            if (!valid(c)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断map是否有效
     *
     * @param map 需要判断map接口
     * @return 判断结果
     */
    public static final boolean valid(Map map) {
        return !(map == null || map.isEmpty());
    }

    /**
     * 判断一组map是否有效<br/>
     * Map为不定参数类型
     *
     * @param maps 需要判断map对象
     * @return 判断结果
     */
    public static final boolean valid(Map... maps) {
        for (Map m : maps) {
            if (!valid(m)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断字符串是否是符合指定格式的时间
     *
     * @param date   需判断的时间字符串
     * @param format 预期时间格式
     * @return 是否符合
     */
    public static final boolean isDate(String date, String format) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            sdf.parse(date);
            return true;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return false;
    }


}
